package java8NewFeatures.Optional;

import javax.xml.crypto.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import static org.junit.Assert.assertEquals;

/**
 * @author ldy
 * @data 2022/11/10
 * @description
 * Optional类(java.util.Optional) 是一个容器类，代表一个值存在或不存在，原来用 null 表示一个值不存在，
 * 现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
 */
public class OptionalDemo {
    public static void main(String[] args) {
        //使用empty()方法创建一个空的Optional对象：
        Optional<String> empty = Optional.empty();
        System.out.println(empty);

        //使用of()方法创建Optional对象
//        String name = "binghe";
//        Optional<String> opt = Optional.of(name);
//        System.out.println(opt.get());

        //传递给of()的值不可以为空，否则会抛出空指针异常。例如，下面的程序会抛出空指针异常。
//        String name = null;
//        Optional<String> opt = Optional.of(name);

        //如果我们需要传递一些空值，那我们可以使用下面的示例所示。
        //使用ofNullable()方法，则当传递进去一个空值时，不会抛出异常，而只是返回一个空的Optional对象，如同我们用Optional.empty()方法一样。
//        String name = null;
//        Optional<String> opt = Optional.ofNullable(name);

        List<Data> name = new ArrayList<>();
        Optional<List<Data>> opt = Optional.ofNullable(name);
        System.out.println(opt.isPresent());
    }
}
